Over the last few decades, electronic devices have become increasingly pervasive. While electronics in some form have been popular with consumers ever since the invention of radio, modern electronics have become ubiquitous to an unprecedented level due, at least in part, to the availability of inexpensive, mobile computing devices. These increasingly portable yet powerful devices can now perform a wide range of tasks formerly reserved for larger computers. Further, because of the communication and sensing capabilities included in such devices, they have spawned a wide range of new uses that have made them nearly indispensible to modern consumers.
As with their desktop counterparts, mobile computing devices must deal with communicating increasingly larger amounts of data to the users, and must interact with users in increasingly sophisticated ways. These interactions are especially challenging with mobile devices, because of their small size and need for power efficiency. Also, as with desktop computers, mobile devices now include software that is ever more complex and extensible. Such complexity inevitably leads to failures, which can range from mildly annoying to a level that renders some functionality unusable. In order to compete in an increasingly competitive mobile device market, these and other sources of user frustration must be addressed when developing such devices.